package com.tenbit.tbw.svc;

import java.util.Calendar;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.tenbit.tbw.dao.ProductInfoListEDAO;
import com.tenbit.tbw.vo.PDT1010VO;


@Service
public class PDT1010SVCImpl implements PDT1010SVC{
	
	@Autowired
	private ProductInfoListEDAO dao;
	
	private Logger log=Logger.getLogger(this.getClass());
	
	private String msg=null;
	private Map<String, Object> resultMap=new HashMap<String, Object>();
	
	@Override
	public Map<String, Object> getProductInfoList(Map<String, Object> paramMap)
	{	
		log.debug(" ==============PDT1010SVCImpl-getListProductInfo:초기 상품정보 목록 ==============");
		String sellStartDate1=(String) paramMap.get("sellStartDate1");
		String sellStartDate2=(String) paramMap.get("sellStartDate2");
		String productName=(String) paramMap.get("productName");
		
		boolean result = false;
		
		Calendar calendar = Calendar.getInstance( );
		List<PDT1010VO> productInfoList=null;
		
		// 판매개시일 조건 sellStartDate1,sellStartDate2 두 조건 모두 Default 일때 값 해당 달의 첫발 부터 현재일로 조정 하여 처리
		if((sellStartDate1==null ||sellStartDate1=="") &&(sellStartDate2==null ||sellStartDate2=="")&& (productName==null || productName==""))
		{
			sellStartDate1= calendar.get(Calendar.YEAR)+"-"+(calendar.get(Calendar.MONTH)+1)+"-"+1;
			sellStartDate2= calendar.get(Calendar.YEAR)+"-"+(calendar.get(Calendar.MONTH)+1)+"-"+calendar.get(Calendar.DAY_OF_MONTH);
		
			paramMap.put("sellStartDate1", sellStartDate1);	
			paramMap.put("sellStartDate2", sellStartDate2);
			
			productInfoList = dao.listProductInfo(paramMap);
			
			msg="<script>alert('검색조건 없음 : 정상적으로 처리되었습니다.');</script>";
			result=true;
			resultMap.put("result", result);
			
			resultMap.put("sellStartDate1", sellStartDate1);
			resultMap.put("sellStartDate2", sellStartDate2);
			resultMap.put("productInfoList", productInfoList);
			resultMap.put("msg",msg);
			log.debug(resultMap);
			return resultMap;
			
		} else if((sellStartDate1==null ||sellStartDate1=="") &&(sellStartDate2!=null && sellStartDate2!=""))
		{
			//판매개시일 조건 sellStartDate1 Default 일때 값 처리
			sellStartDate1= 1900+"-"+"01"+"-"+"01";
			paramMap.put("sellStartDate1", sellStartDate1);	
			//해당월 마지막 날 체크
			
			result=false;
			resultMap.put("result", result);
			msg="<script>alert('처리실패 : sellStartDate2 의 일자를 확인해 주세요.');</script>";
			resultMap.put("msg",msg);
			log.debug(resultMap);
			return resultMap;
		} else if((sellStartDate1!=null && sellStartDate1!="") &&(sellStartDate2==null || sellStartDate2==""))
		{
			//판매개시일 조건 sellStartDate2 Default 일때 값 처리
			sellStartDate2= 9999+"-"+"12"+"-"+"31";
			
			paramMap.put("sellStartDate2", sellStartDate2);	
			
		
			result=false;
			resultMap.put("result", result);
			msg="<script>alert('처리실패 : sellStartDate1 의 일자를 확인해 주세요.');</script>";
			resultMap.put("msg",msg);
			log.debug(resultMap);
			return resultMap;
		} else if((sellStartDate1!=null && sellStartDate1!="") &&(sellStartDate2!=null || sellStartDate2!=""))
		{
			
			String[] start1=sellStartDate1.split("-");
			String[] start2=sellStartDate2.split("-");
			
			int startYear1=Integer.parseInt(start1[0]);
			int startMonth1=Integer.parseInt(start1[1]);
			int startDay1=Integer.parseInt(start1[2]);
			
			int startYear2=Integer.parseInt(start2[0]);
			int startMonth2=Integer.parseInt(start2[1]);
			int startDay2=Integer.parseInt(start2[2]);
			
			if(startYear1>startYear2
					||(startYear1==startYear2 && startMonth1>startMonth2)
					||(startYear1==startYear2 && startMonth1==startMonth2 && startDay1>startDay2))
			{
				msg="<script>alert('처리 실패 : sellStartDate1 가 sellStartDate2 보다 큽니다 ');</script>";
				result=false;
				resultMap.put("result", result);
				resultMap.put("sellStartDate1", sellStartDate1);
				resultMap.put("sellStartDate2", sellStartDate2);
				resultMap.put("msg",msg);
				log.debug(resultMap);
				return resultMap;
			}
		} else if(productName!=null && productName!="" && (sellStartDate1==null ||sellStartDate1=="") &&(sellStartDate2==null ||sellStartDate2==""))
		{
			sellStartDate1= 1900+"-"+"01"+"-"+"01";
			paramMap.put("sellStartDate1", sellStartDate1);	
			sellStartDate2= calendar.get(Calendar.YEAR)+"-"+(calendar.get(Calendar.MONTH)+1)+"-"+calendar.get(Calendar.DAY_OF_MONTH);
			paramMap.put("sellStartDate2", sellStartDate2);	
			
			productInfoList= dao.listProductInfo(paramMap);
			msg="<script>alert('sellStartDate1,sellStartDate2 Default : 정상적으로 처리되었습니다.');</script>";
			result=true;
			resultMap.put("result", result);
			resultMap.put("sellStartDate1", sellStartDate1);
			resultMap.put("sellStartDate2", sellStartDate2);
			resultMap.put("productInfoList", productInfoList);
			resultMap.put("msg",msg);
			log.debug(resultMap);
			return resultMap;
		} 
		
		log.debug("paramMap"+paramMap);
		
		productInfoList= dao.listProductInfo(paramMap);
		msg="<script>alert('정상적으로 처리 되었습니다.');</script>";
		result=true;
		resultMap.put("result", result);
		resultMap.put("sellStartDate1", sellStartDate1);
		resultMap.put("sellStartDate2", sellStartDate2);
		resultMap.put("productInfoList", productInfoList);
		resultMap.put("msg",msg);
		log.debug(resultMap);
		return resultMap;
	}
	public Map<String, Object> getProductInfoListCount(Map<String, Object> paramMap){
		log.debug(" ==============PDT1010SVCImpl-getListProductInfo:초기 상품정보 목록 ==============");
		String sellStartDate1=(String) paramMap.get("sellStartDate1");
		String sellStartDate2=(String) paramMap.get("sellStartDate2");
		String productName=(String) paramMap.get("productName");
		Calendar calendar = Calendar.getInstance( );
		int listCount=0;
		
		// 판매개시일 조건 sellStartDate1,sellStartDate2 두 조건 모두 Default 일때 값 해당 달의 첫발 부터 현재일로 조정 하여 처리
		if((sellStartDate1==null ||sellStartDate1=="") &&(sellStartDate2==null ||sellStartDate2=="")&& (productName==null || productName==""))
		{
			sellStartDate1= calendar.get(Calendar.YEAR)+"-"+(calendar.get(Calendar.MONTH)+1)+"-"+1;
			sellStartDate2= calendar.get(Calendar.YEAR)+"-"+(calendar.get(Calendar.MONTH)+1)+"-"+calendar.get(Calendar.DAY_OF_MONTH);
		
			paramMap.put("sellStartDate1", sellStartDate1);	
			paramMap.put("sellStartDate2", sellStartDate2);
			
			listCount = dao.getProductInfoListCount(paramMap);
			
			msg="<script>alert('검색조건 없음 : 정상적으로 처리되었습니다.');</script>";
			
			resultMap.put("listCount", listCount);
			resultMap.put("msg",msg);
			log.debug(resultMap);
			return resultMap;
			
		} else if((sellStartDate1==null ||sellStartDate1=="") &&(sellStartDate2!=null && sellStartDate2!=""))
		{
			//판매개시일 조건 sellStartDate1 Default 일때 값 처리
			sellStartDate1= 1900+"-"+"01"+"-"+"01";
			paramMap.put("sellStartDate1", sellStartDate1);	
			//해당월 마지막 날 체크
			
			msg="<script>alert('sellStartDate2 의 일자를 확인해 주세요 : 정상적으로 처리되었습니다.');</script>";
			resultMap.put("msg",msg);
			log.debug(resultMap);
			return resultMap;
		} else if((sellStartDate1!=null && sellStartDate1!="") &&(sellStartDate2==null || sellStartDate2==""))
		{
			//판매개시일 조건 sellStartDate2 Default 일때 값 처리
			sellStartDate2= calendar.get(Calendar.YEAR)+"-"+(calendar.get(Calendar.MONTH)+1)+"-"+calendar.get(Calendar.DAY_OF_MONTH);
			
			paramMap.put("sellStartDate2", sellStartDate2);	
			
			msg="<script>alert('sellStartDate1 의 일자를 확인해 주세요 : 정상적으로 처리되었습니다.');</script>";
			resultMap.put("msg",msg);
			log.debug(resultMap);
			return resultMap;
		} else if((sellStartDate1!=null && sellStartDate1!="") &&(sellStartDate2!=null || sellStartDate2!=""))
		{
			
			String[] start1=sellStartDate1.split("-");
			String[] start2=sellStartDate2.split("-");
			
			int startYear1=Integer.parseInt(start1[0]);
			int startMonth1=Integer.parseInt(start1[1]);
			int startDay1=Integer.parseInt(start1[2]);
			
			int startYear2=Integer.parseInt(start2[0]);
			int startMonth2=Integer.parseInt(start2[1]);
			int startDay2=Integer.parseInt(start2[2]);
			
			if(startYear1>startYear2
					||(startYear1==startYear2 && startMonth1>startMonth2)
					||(startYear1==startYear2 && startMonth1==startMonth2 && startDay1>startDay2))
			{
				msg="<script>alert('처리 실패 : sellStartDate1 가 sellStartDate2 보다 큽니다 ');</script>";
				resultMap.put("msg",msg);
				log.debug(resultMap);
				return resultMap;
			}
		} else if(productName!=null && productName!="" && (sellStartDate1==null ||sellStartDate1=="") &&(sellStartDate2==null ||sellStartDate2==""))
		{
			sellStartDate1= 1900+"-"+"01"+"-"+"01";
			paramMap.put("sellStartDate1", sellStartDate1);	
			sellStartDate2= calendar.get(Calendar.YEAR)+"-"+(calendar.get(Calendar.MONTH)+1)+"-"+calendar.get(Calendar.DAY_OF_MONTH);
			paramMap.put("sellStartDate2", sellStartDate2);	
			
			listCount= dao.getProductInfoListCount(paramMap);
			msg="<script>alert('sellStartDate1,sellStartDate2 Default : 정상적으로 처리되었습니다.');</script>";
			
			resultMap.put("listCount", listCount);
			resultMap.put("msg",msg);
			log.debug(resultMap);
			return resultMap;
		}
		
		listCount= dao.getProductInfoListCount(paramMap);
		msg="<script>alert('정상적으로 처리 되었습니다.');</script>";
		
		resultMap.put("listCount", listCount);
		resultMap.put("msg",msg);
		log.debug(resultMap);
		return resultMap;
	}
	@Override
	public List getCategoryInfo() {
		List cateInfo= dao.getCateInfo();
		
		log.debug(cateInfo);
		return cateInfo;
	}
	
	
	
}
